// axios
import axios from 'axios';
// elementUi 消息弹框
import {
    Message
} from 'element-ui';
// 获取本地token
import {
    getLocal,
    removeLocal
} from '@/utils/local.js';
// router实例
import router from '@/router/router.js';
// 创建axios副本
const _fetch = axios.create({
    baseURL: process.env.VUE_APP_URL,
    withCredentials: true,
})

// 请求拦截器
_fetch.interceptors.request.use(function (config) {
    // 在请求到服务端之前
    // 在每次发送axios请求的时候，设置请求头携带token
    config.headers.token = getLocal();
    return config
}, function (error) {
    // 请求错误执行的函数体
    return Promise.reject(error) // 返回一个状态为以失败的promise对象
})

// 响应拦截器
_fetch.interceptors.response.use(function (response) {
    // 在响应的数据到达前台前
    if (response.data.code == 200) {
        return response.data
    } else if (response.data.code == 206) {
        // 问题：没有登录的用户依然可以进入首页
        // 状态码为206都是token参数错误导致，我们可以在响应拦截器中进行解决
        // 1.清除token
        removeLocal();
        // 2.打回到登录页
        router.push("/login");
        // 3.抛出错误,终止接口.then方法的调用
        return Promise.reject(response.data.message)
    } else {
        Message.error(response.data.message)
        return Promise.reject(response.data.message)
    }
}, function (error) {
    // 响应错误的执行体
    return Promise.reject(error)
})

export default _fetch